﻿#define  _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

#include<map>
#include<set>


// set

//int main()
//{
//	// 去重+升序排序
//	set<int> s;
//	// 去重+降序排序（给⼀个⼤于的仿函数）
//	//set<int, greater<int>> s;
//	s.insert(5);
//	s.insert(2);
//	s.insert(7);
//	s.insert(5);
//
//	auto it = s.begin();
//	while (it != s.end())
//	{
//		cout << *it << " ";
//		++it;
//	}
//	cout << endl;
//
//	s.insert({ 2,8,3,9 });
//	for (auto& e : s)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	set<string> strset = { "sort", "insert", "add" };
//	for (auto& e : strset)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//
//	return 0;
//}

//int main()
//{
//	set<int> s = { 4,2,7,2,8,5,9 };
//	for (auto e : s)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	// 删除最小值
//	s.erase(s.begin());
//
//	for (auto e : s)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//	
//	//int x = 0;
//	//cin >> x;
//	//int num = s.erase(x);
//	//if (num == 0)
//	//{
//	//	cout << x << "不存在！" << endl;
//	//}
//
//	//for (auto e : s)
//	//{
//	//	cout << e << " ";
//	//}
//	//cout << endl;
//
//	int x = 0;
//	cin >> x;
//	set<int>::iterator pos = s.find(x);
//	if (pos != s.end())
//	{
//		s.erase(pos);
//	}
//	else
//	{
//		cout << x << "不存在！" << endl;
//	}
//
//	for (auto e : s)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	// O(N)
//	auto pos1 = find(s.begin(), s.end(), x);
//	// O(logN)
//	auto pos2 = s.find(x);
//
//	cin >> x;
//	/*auto pos = s.find(x);
//	if (pos != s.end())*/
//	if(s.count(x))
//	{
//		cout << x << "存在！" << endl;
//	}
//	else
//	{
//		cout << x << "不存在！" << endl;
//	}
//
//	return 0;
//}

//int main()
//{
//	set<int> myset;
//	for (int i = 1; i < 10; i++)
//		myset.insert(i * 10); // 10 20 30 40 50 60 70 80 90
//
//	for (auto e : myset)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	//// 删除 [30, 60] 区间中的值  [itlow, itup)
//	//// 找到大于等于30的左端点
//	//auto itlow = myset.lower_bound(30);
//	//// 找到大于60的右端点
//	//auto itup = myset.upper_bound(60);
//
//	//myset.erase(itlow, itup);
//	//for (auto e : myset)
//	//{
//	//	cout << e << " ";
//	//}
//	//cout << endl;
//
//	auto itlow = myset.lower_bound(35);
//	auto itup = myset.upper_bound(90);
//
//	myset.erase(itlow, itup);
//	for (auto e : myset)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	return 0;
//}


// multiset

//int main()
//{
//	// 相比set不同的是，multiset是排序，但是不去重
//	multiset<int> s = { 4,2,7,2,4,8,4,5,4,9 };
//	auto it = s.begin();
//	while (it != s.end())
//	{
//		cout << *it << " ";
//		++it;
//	}
//	cout << endl;
//
//	// find返回中序的第一个4
//	auto pos = s.find(4);
//	while (*pos == 4)
//	{
//		cout << *pos << " ";
//		++pos;
//	}
//	cout << endl;
//
//	cout << s.count(4) << endl;
//	cout << s.count(5) << endl;
//	cout << s.count(6) << endl;
//
//	//// 删除所有的4
//	//cout << s.erase(4) << endl;
//
//	//for (auto e : s)
//	//{
//	//	cout << e << " ";
//	//}
//	//cout << endl;
//
//	// 删除中序第一个4
//	pos = s.find(4);
//	if(pos != s.end())
//		s.erase(pos);
//
//	it = s.begin();
//	while (it != s.end())
//	{
//		cout << *it << " ";
//		++it;
//	}
//	cout << endl;
//
//	return 0;
//}


// map

//int main()
//{
//	map<string, string> dict;
//
//	pair<string, string> kv1("sort", "排序");
//	dict.insert(kv1);
//	dict.insert(pair<string, string>("left", "左边"));
//	dict.insert(make_pair("left", "左边"));
//	dict.insert({ "right", "右边" });
//
//	auto it = dict.begin();
//	while (it != dict.end())
//	{
//		cout << it->first << ":" << it->second << endl;
//		++it;
//	}
//
//	for (auto& e : dict)
//	{
//		cout << e.first << ":" << e.second << endl;
//	}
//
//	string str;
//	while (cin >> str)
//	{
//		auto ret = dict.find(str);
//		if (ret != dict.end())
//		{
//			cout << "->" << ret->second << endl;
//		}
//		else
//		{
//			cout << "无此单词，请重新输入" << endl;
//		}
//	}
//
//	return 0;
//}

//int main()
//{
//	string arr[] = { "苹果", "西瓜", "苹果", "西瓜", "苹果", "苹果", "西瓜","苹果", "香蕉", "苹果", "香蕉" };
//	map<string, int> countMap;
//	for (auto& e : arr)
//	{
//		countMap[e]++;
//	}
//
//	for (auto& e : countMap)
//	{
//		cout << e.first << ":" << e.second << endl;
//	}
//	return 0;
//}

#include<string>

//int main()
//{
//	string str;
//	while (cin >> str)
//	{
//		cout << str << endl;
//	}
//	return 0;
//}

#include <iostream>
#include<string>
#include<map>
using namespace std;

int main() {
    string str;
    getline(cin, str);
    string buff;
    map<string, int> countMap;
    for (auto& e : str)
    {
        if (e >= 'a' && e <= 'z')
        {
            buff.push_back(e);
        }
        else if ((e >= 'A' && e <= 'Z'))
        {
            buff.push_back(e + 32);
        }
        else
        {
            countMap[buff]++;
            buff.clear();
        }
    }

    for (auto& e : countMap)
    {
        cout << e.first << ":" << e.second << endl;
    }

    return 0;
}
